#pragma once

#include "rend_Color.h"
#include "rend_Blend.h"
#include "rend_Texture.h"

//! Opis systemu czasteczek.

struct ParticleSystemDesc
{
	//! Minimalny okres zycia czasteczki.
	float	min_life_time;			
	//! Maksymalny okres zycia czasteczki.
	float	max_life_time;			
	//! Liczba czasteczek (lub czasteczek na sekunde gdy system jest zapetlony).
	u32		particle_count;	
	//! Kierunek predkosci.
	vec2	direction;					
	//! Kat o ktory kierunek moze sie zmienic.
	float	angle;					
	//! Pozycja systemu czastek.
	pos2	position;					
	//! Blending.
	Blend	blend;					
	//! Tekstura.
	Texture	texture;				
	//! Czy system jest zapetlony?
	bool	repeating;				
	//! Poczatkowa wielkosc czasteczki.
	float	start_size;			
	//! Finalna wielkosc czasteczki.
	float	dest_size;			
	//! Minimalna predkosc obrotowa.
	float	min_rotation;			
	//! Maksymalna predkosc obrotowa.
	float	max_rotation;				
	//! Czy system ma emitowac nowe czasteczki?
	bool	emit;						
	//! Ile czasu system moze jeszcze emitowac czasteczki?
	int		time_to_stop_emit;		
	//! Poczatkowy kolor czasteczki.
	Color	start_color;
	//! Finalny kolor czasteczki.
	Color	end_color;
};

//! System czasteczek.

class ParticleSystem
{
public:
	//! Nic nie robi.
	virtual						~ParticleSystem() {}
	//! Animuje wszystkie czasteczki.
	virtual bool				animate(const double &elapsed_ms) = 0;
	//! Rysuje wszystkie czasteczki.
	virtual void				draw() = 0;
	//! Zwraca swoj opis.
	virtual ParticleSystemDesc&	get_desc() = 0;
};